LNMP之常见的问题处理

1. 常见的502问题解决

对于LNMP来说,最常见的问题就是502问题了。配置完环境后,一访问网站直接提示502 Bad Gateway。出现502的原因大致分为这么两种。

1.1. 配置错误

我们在Nginx的配置中有这么一段:

1
2
3
4
5
6
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
}

说明:

  • 如果我把fastcgi_pass后面指定的路径配置错了,那么就会出现502的错误,因为Nginx找不到php-fpm了。
  • fastcgi_pass后面可以跟socket,也可以跟ip:port,默认监听地址为:127.0.0.1:9000

1.2. 资源耗尽

LNMP架构处理PHP时,是Nginx直接调取后端的php-fpm服务,如果Nginx的请求量偏高,而后台又没有给php-fpm配置足够的子进程,那么总有php-fpm资源耗尽的时候,一旦耗尽Nginx则找不到php-fpm,此时就会导致502出现。

那这时候的解决方案就是去调整php-fpm.conf中的pm.max_children数值,使其增加。但也不能无限设置,毕竟服务器的资源有限,根据经验,4G内存机器如果只跑php-fpm和Nginx,不跑MySQL服务,则pm.max_children可以设置为150,尽量不要超过这个数值。8G内存可以设置为300,以此类推。

1.3. 其它的情况

当然,除了上面这两种情况外,也会有其它的情况导致502发生,但很少很少。那我们如何去判定到底是什么原因导致502呢?

其实,我们有一个办法可以去排查此类问题。就是要借助Nginx的错误日志啦。在Nginx.conf中有一个参数叫做error_log,它可以指定错误日志的路径,而错误日志其实还能定义级别。默认是crit,该级别为最严谨的,记录日志也是最少的,有可能一些小问题我们不能发现,所以有必要把日志级别调整一下,比如error_log /usr/local/nginx/logs/nginx_error.log debug;,这样显示的日志就会有很多,不要忘记当调试完后要把级别改为crit,否则error_log会把磁盘撑爆。

0%